#include "realtimeexportmanager.h"
#include "mainwindow.h"
#include "pageview.h"
#include <QDebug>
#include <QTimer>
#include <QApplication>
RealTimeExportManager::RealTimeExportManager(QObject *parent)
    : QObject(parent)
    , m_mainWindow(nullptr)
    , m_pageView(nullptr)
    , m_isExporting(false)
    , m_currentFileIndex(0)
    , m_currentPageIndex(0)
    , m_totalPages(0)
    , m_pdfWriter(nullptr)
{
    m_processTimer = new QTimer(this);
    m_processTimer->setSingleShot(true);
    connect(m_processTimer, &QTimer::timeout, this, &RealTimeExportManager::processNextPage);
}
RealTimeExportManager::~RealTimeExportManager()
{
    stopExport();
}
void RealTimeExportManager::setMainWindow(MainWindow* mainWindow)
{
    m_mainWindow = mainWindow;
}
void RealTimeExportManager::setPageView(PageView* pageView)
{
    m_pageView = pageView;
}
void RealTimeExportManager::startExport(const QList<UnifiedFileInfo>& files, const OutputSettings& settings, const QString& outputPath)
{
    if (m_isExporting) {
        return;
    }
    m_files = files;
    m_settings = settings;
    m_outputPath = outputPath;
    initializeExport();
}
void RealTimeExportManager::stopExport()
{
    if (!m_isExporting) return;
    m_isExporting = false;
    m_processTimer->stop();
}
void RealTimeExportManager::initializeExport()
{
    m_isExporting = true;
    m_currentFileIndex = 0;
    m_currentPageIndex = 0;
    // 计算总页数
    m_totalPages = 0;
    for (const UnifiedFileInfo& file : m_files) {
        m_totalPages += file.pageCount;
    }
    // 如果启用封面，增加一页
    if (m_settings.coverPage.enabled) {
        m_totalPages += 1;
    }
    // 开始处理第一页
    m_processTimer->start(100);  // 100ms后开始处理
}
void RealTimeExportManager::processNextPage()
{
    if (!m_isExporting) return;
    // 处理封面页（如果启用且是第一页）
    if (m_settings.coverPage.enabled && m_currentFileIndex == 0 && m_currentPageIndex == 0) {
        QImage coverPage = renderCoverPage();
        // 更新主窗口预览
        emit currentPageChanged(coverPage, tr("封面页"));
        emit progressUpdated(1, m_totalPages, tr("正在处理封面页"));
        // 处理应用程序事件，让UI更新
        QApplication::processEvents();
        // 这里应该写入PDF，暂时跳过
        // 移动到下一页（第一个文件的第一页）
        m_currentPageIndex++;
        m_processTimer->start(500);  // 500ms后处理下一页
        return;
    }
    // 处理普通页面
    if (m_currentFileIndex < m_files.size()) {
        processCurrentPage();
    } else {
        // 所有页面处理完成
        finalizeExport();
    }
}
void RealTimeExportManager::processCurrentPage()
{
    const UnifiedFileInfo& currentFile = m_files[m_currentFileIndex];
    // 计算当前文件中的页面索引（减去封面页的偏移）
    int filePageIndex = m_currentPageIndex;
    if (m_settings.coverPage.enabled) {
        filePageIndex -= 1;  // 减去封面页
    }
    // 检查是否超出当前文件的页面范围
    if (filePageIndex >= currentFile.pageCount) {
        // 移动到下一个文件
        m_currentFileIndex++;
        filePageIndex = 0;
        if (m_currentFileIndex >= m_files.size()) {
            finalizeExport();
            return;
        }
    }
    // 渲染当前页面
    QImage pageImage = renderPageForExport(m_currentFileIndex, filePageIndex);
    // 更新主窗口预览
    QString pageInfo = tr("文件 %1/%2: %3 - 第 %4/%5 页")
                      .arg(m_currentFileIndex + 1)
                      .arg(m_files.size())
                      .arg(currentFile.fileName)
                      .arg(filePageIndex + 1)
                      .arg(currentFile.pageCount);
    emit currentPageChanged(pageImage, pageInfo);
    emit progressUpdated(m_currentPageIndex + 1, m_totalPages, tr("正在处理: %1").arg(pageInfo));
    emit fileProgressUpdated(m_currentFileIndex + 1, m_files.size(), currentFile.fileName);
    emit pageProgressUpdated(filePageIndex + 1, currentFile.pageCount, pageInfo);
    // 处理应用程序事件，让UI更新
    QApplication::processEvents();
    // 这里应该写入PDF，暂时跳过
    // 移动到下一页
    m_currentPageIndex++;
    m_processTimer->start(800);  // 800ms后处理下一页，让用户看清楚预览
}
QImage RealTimeExportManager::renderPageForExport(int fileIndex, int pageIndex)
{
    // 这里需要从缓存或者直接渲染获取页面
    // 暂时返回一个占位符
    if (m_pageView && fileIndex < m_files.size()) {
        // 尝试使用PageView的导出渲染方法
        return m_pageView->renderCurrentPage(pageIndex, true);
    }
    // 如果无法获取，创建一个占位符
    QImage placeholder(800, 600, QImage::Format_RGB32);
    placeholder.fill(Qt::white);
    return placeholder;
}
QImage RealTimeExportManager::renderCoverPage()
{
    // 渲染封面页
    QImage coverPage(800, 600, QImage::Format_RGB32);
    coverPage.fill(Qt::white);
    // 这里应该根据m_settings.coverTitle等生成真正的封面
    // 暂时返回空白页面
    return coverPage;
}
void RealTimeExportManager::finalizeExport()
{
    m_isExporting = false;
    emit exportCompleted(m_outputPath);
    emit progressUpdated(m_totalPages, m_totalPages, tr("导出完成"));
}